Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OSPFv3 model #1257

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open

OSPFv3 model #1257

wants to merge 2 commits into from

Conversation

cpeng90
Copy link

@cpeng90 cpeng90 commented Feb 13, 2025

Change Scope

This change defines a OSPFv3 Yang provisioning and operational model. The LS database definition and MPLS add-ons are out of the scope of this change.
The change is backward compatible.

Platform Implementations

[Note: Please provide at least two references to implementations which are relevant to the model changes proposed. Each implementation should be from separate organizations.].

[Note: If the feature being proposed is new - and something that is being
proposed as an enhancement to device functionality, it is sufficient to have
reviewers from the producers of two different implementations].

@cpeng90 cpeng90 requested a review from a team as a code owner February 13, 2025 19:07
release/models/ospf/openconfig-ospf-common.yang Outdated Show resolved Hide resolved
release/models/ospf/openconfig-ospf-common.yang Outdated Show resolved Hide resolved
release/models/ospf/openconfig-ospf-common.yang Outdated Show resolved Hide resolved
@dplore
Copy link
Member

dplore commented Feb 19, 2025

/gcbrun

@OpenConfigBot
Copy link

OpenConfigBot commented Feb 19, 2025

No major YANG version changes in commit 87f1c25

@dplore
Copy link
Member

dplore commented Feb 19, 2025

@cpeng90 please check the ygot and linter errors. For example, all config leafs must also be present as state leaves

To avoid duplicating leaves, can the openconfig-ospf-area-interface.yang submodule replace the existing ospfv2 area interface submodule? (openconfig-ospfv2-area-interface.yang). Then this new ospf-area-interface sub module can serve as a common submodule for both v2 and v3? (And then the additional v3 leaves would continue to appear in the v3 module you are adding here).

I haven't looked super closely yet, but if this would still result in the same ospfv2 tree to be rendered, without any breaking changes, then this is a good idea I think. If there would be breaking changes to the ospv2 tree, please point out where those would be. We certainly do not want to make any breaking changes to ospfv2 (or really any changes at all).

@dplore
Copy link
Member

dplore commented Feb 19, 2025

Adding tree view:

+        |     +--rw ospfv3
+        |     |  +--rw global
+        |     |  |  +--rw config
+        |     |  |  |  +--rw router-id?                    yang:dotted-quad
+        |     |  |  |  +--rw log-adjacency-changes?        boolean
+        |     |  |  |  +--rw hide-transit-only-networks?   boolean
+        |     |  |  |  +--rw abr-capability?               identityref
+        |     |  |  +--ro state
+        |     |  |  |  +--ro router-id?                    yang:dotted-quad
+        |     |  |  |  +--ro log-adjacency-changes?        boolean
+        |     |  |  |  +--ro hide-transit-only-networks?   boolean
+        |     |  |  |  +--ro abr-capability?               identityref
+        |     |  |  +--rw timers
+        |     |  |  |  +--rw spf
+        |     |  |  |  |  +--rw config
+        |     |  |  |  |  |  +--rw initial-delay?   uint32
+        |     |  |  |  |  |  +--rw maximum-delay?   uint32
+        |     |  |  |  |  +--ro state
+        |     |  |  |  |     +--ro initial-delay?   uint32
+        |     |  |  |  |     +--ro maximum-delay?   uint32
+        |     |  |  |  |     +--ro timer-type?      enumeration
+        |     |  |  |  +--rw max-metric
+        |     |  |  |  |  +--rw config
+        |     |  |  |  |  |  +--rw set?       boolean
+        |     |  |  |  |  |  +--rw timeout?   uint64
+        |     |  |  |  |  |  +--rw include*   identityref
+        |     |  |  |  |  |  +--rw trigger*   identityref
+        |     |  |  |  |  +--ro state
+        |     |  |  |  |     +--ro set?       boolean
+        |     |  |  |  |     +--ro timeout?   uint64
+        |     |  |  |  |     +--ro include*   identityref
+        |     |  |  |  |     +--ro trigger*   identityref
+        |     |  |  |  +--rw lsa-generation
+        |     |  |  |     +--rw config
+        |     |  |  |     |  +--rw initial-delay?   uint32
+        |     |  |  |     |  +--rw maximum-delay?   uint32
+        |     |  |  |     +--ro state
+        |     |  |  |        +--ro initial-delay?   uint32
+        |     |  |  |        +--ro maximum-delay?   uint32
+        |     |  |  |        +--ro timer-type?      enumeration
+        |     |  |  +--rw graceful-restart
+        |     |  |  |  +--rw config
+        |     |  |  |  |  +--rw enabled?       boolean
+        |     |  |  |  |  +--rw helper-only?   boolean
+        |     |  |  |  +--ro state
+        |     |  |  |     +--ro enabled?       boolean
+        |     |  |  |     +--ro helper-only?   boolean
+        |     |  |  +--rw inter-area-propagation-policies
+        |     |  |     +--rw inter-area-propagation-policy* [src-area dst-area]
+        |     |  |        +--rw src-area    -> ../config/src-area
+        |     |  |        +--rw dst-area    -> ../config/dst-area
+        |     |  |        +--rw config
+        |     |  |        |  +--rw src-area?                -> ../../../../../areas/area/identifier
+        |     |  |        |  +--rw dst-area?                -> ../../../../../areas/area/identifier
+        |     |  |        |  +--rw import-policy*           -> /oc-rpol:routing-policy/policy-definitions/policy-definition/name
+        |     |  |        |  +--rw default-import-policy?   default-policy-type
+        |     |  |        +--ro state
+        |     |  |           +--ro src-area?                -> ../../../../../areas/area/identifier
+        |     |  |           +--ro dst-area?                -> ../../../../../areas/area/identifier
+        |     |  |           +--ro import-policy*           -> /oc-rpol:routing-policy/policy-definitions/policy-definition/name
+        |     |  |           +--ro default-import-policy?   default-policy-type
+        |     |  +--rw areas
+        |     |     +--rw area* [identifier]
+        |     |        +--rw identifier       -> ../config/identifier
+        |     |        +--rw config
+        |     |        |  +--rw identifier?          oc-ospf-types:ospf-area-identifier
+        |     |        |  +--rw type?                identityref
+        |     |        |  +--rw stub-default-cost?   uint32
+        |     |        |  +--rw import-summaries?    boolean
+        |     |        |  +--rw address-ranges* [prefix]
+        |     |        |     +--rw prefix    -> ../config/prefix
+        |     |        |     +--rw config
+        |     |        |     |  +--rw prefix?   inet:ip-prefix
+        |     |        |     |  +--rw status?   enumeration
+        |     |        |     +--ro state
+        |     |        |        +--ro prefix?   inet:ip-prefix
+        |     |        |        +--ro status?   enumeration
+        |     |        +--ro state
+        |     |        |  +--ro identifier?          oc-ospf-types:ospf-area-identifier
+        |     |        |  +--ro type?                identityref
+        |     |        |  +--ro stub-default-cost?   uint32
+        |     |        |  +--ro import-summaries?    boolean
+        |     |        |  +--ro address-ranges* [prefix]
+        |     |        |     +--ro prefix    -> ../config/prefix
+        |     |        |     +--ro config
+        |     |        |     |  +--ro prefix?   inet:ip-prefix
+        |     |        |     |  +--ro status?   enumeration
+        |     |        |     +--ro state
+        |     |        |        +--ro prefix?   inet:ip-prefix
+        |     |        |        +--ro status?   enumeration
+        |     |        +--rw interfaces
+        |     |        |  +--rw interface* [id]
+        |     |        |     +--rw id                  -> ../config/id
+        |     |        |     +--rw config
+        |     |        |     |  +--rw id?                             string
+        |     |        |     |  +--rw network-type?                   identityref
+        |     |        |     |  +--rw priority?                       uint8
+        |     |        |     |  +--rw multi-area-adjacency-primary?   boolean
+        |     |        |     |  +--rw authentication-type?            string
+        |     |        |     |  +--rw metric?                         oc-ospf-types:ospf-metric
+        |     |        |     |  +--rw passive?                        boolean
+        |     |        |     |  +--rw hide-network?                   boolean
+        |     |        |     |  +--rw oc-ospfv3:instance-id?          uint8
+        |     |        |     |  +--rw oc-ospfv3:interface-id?         uint32
+        |     |        |     +--ro state
+        |     |        |     |  +--ro id?                             string
+        |     |        |     |  +--ro network-type?                   identityref
+        |     |        |     |  +--ro priority?                       uint8
+        |     |        |     |  +--ro multi-area-adjacency-primary?   boolean
+        |     |        |     |  +--ro authentication-type?            string
+        |     |        |     |  +--ro metric?                         oc-ospf-types:ospf-metric
+        |     |        |     |  +--ro passive?                        boolean
+        |     |        |     |  +--ro hide-network?                   boolean
+        |     |        |     |  +--ro dr-router-id?                   yang:dotted-quad
+        |     |        |     |  +--ro dr-ip-address?                  inet:ip-address
+        |     |        |     |  +--ro bdr-router-id?                  yang:dotted-quad
+        |     |        |     |  +--ro bdr-ip-address?                 inet:ip-address
+        |     |        |     |  +--ro oc-ospfv3:instance-id?          uint8
+        |     |        |     |  +--ro oc-ospfv3:interface-id?         uint32
+        |     |        |     +--rw interface-ref
+        |     |        |     |  +--rw config
+        |     |        |     |  |  +--rw interface?      -> /oc-if:interfaces/interface/name
+        |     |        |     |  |  +--rw subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+        |     |        |     |  +--ro state
+        |     |        |     |     +--ro interface?      -> /oc-if:interfaces/interface/name
+        |     |        |     |     +--ro subinterface?   -> /oc-if:interfaces/interface[oc-if:name=current()/../interface]/subinterfaces/subinterface/index
+        |     |        |     +--rw timers
+        |     |        |     |  +--rw config
+        |     |        |     |  |  +--rw dead-interval?                  uint32
+        |     |        |     |  |  +--rw hello-interval?                 uint32
+        |     |        |     |  |  +--rw retransmission-interval?        uint32
+        |     |        |     |  |  +--rw interface-transmission-delay?   uint32
+        |     |        |     |  +--ro state
+        |     |        |     |     +--ro dead-interval?                  uint32
+        |     |        |     |     +--ro hello-interval?                 uint32
+        |     |        |     |     +--ro retransmission-interval?        uint32
+        |     |        |     |     +--ro interface-transmission-delay?   uint32
+        |     |        |     +--rw lsa-filter
+        |     |        |     |  +--rw config
+        |     |        |     |  |  +--rw all?   boolean
+        |     |        |     |  +--ro state
+        |     |        |     |     +--ro all?   boolean
+        |     |        |     +--rw static-neighbors
+        |     |        |     |  +--rw static-neighbor* [neighbor-ip-address]
+        |     |        |     |     +--rw neighbor-ip-address    -> ../config/neighbor-ip-address
+        |     |        |     |     +--rw config
+        |     |        |     |        +--rw neighbor-ip-address?   inet:ip-address
+        |     |        |     |        +--rw metric?                oc-ospf-types:ospf-metric
+        |     |        |     |        +--rw poll-interval?         uint16
+        |     |        |     |        +--rw priority?              uint8
+        |     |        |     +--ro neighbors
+        |     |        |     |  +--ro neighbor* [router-id]
+        |     |        |     |     +--ro router-id    -> ../state/router-id
+        |     |        |     |     +--ro state
+        |     |        |     |        +--ro router-id?                     yang:dotted-quad
+        |     |        |     |        +--ro neighbor-ip-address?           inet:ip-address
+        |     |        |     |        +--ro priority?                      uint8
+        |     |        |     |        +--ro dead-time?                     oc-types:timeticks64
+        |     |        |     |        +--ro dr-router-id?                  yang:dotted-quad
+        |     |        |     |        +--ro dr-ip-address?                 inet:ip-address
+        |     |        |     |        +--ro bdr-router-id?                 yang:dotted-quad
+        |     |        |     |        +--ro bdr-ip-address?                inet:ip-address
+        |     |        |     |        +--ro optional-capabilities?         yang:hex-string
+        |     |        |     |        +--ro last-established-time?         oc-types:timeticks64
+        |     |        |     |        +--ro adjacency-state?               identityref
+        |     |        |     |        +--ro state-changes?                 uint32
+        |     |        |     |        +--ro retransmission-queue-length?   uint32
+        |     |        |     +--rw enable-bfd
+        |     |        |        +--rw config
+        |     |        |        |  +--rw enabled?                       boolean
+        |     |        |        |  +--rw desired-minimum-tx-interval?   uint32
+        |     |        |        |  +--rw required-minimum-receive?      uint32
+        |     |        |        |  +--rw detection-multiplier?          uint8
+        |     |        |        +--ro state
+        |     |        |           +--ro enabled?                       boolean
+        |     |        |           +--ro desired-minimum-tx-interval?   uint32
+        |     |        |           +--ro required-minimum-receive?      uint32
+        |     |        |           +--ro detection-multiplier?          uint8
+        |     |        +--rw virtual-links
+        |     |           +--rw virtual-link* [remote-router-id]
+        |     |              +--rw remote-router-id    -> ../config/remote-router-id
+        |     |              +--rw config
+        |     |              |  +--rw remote-router-id?   inet:ipv4-address-no-zone
+        |     |              +--ro state
+        |     |                 +--ro remote-router-id?              inet:ipv4-address-no-zone
+        |     |                 +--ro router-id?                     yang:dotted-quad
+        |     |                 +--ro neighbor-ip-address?           inet:ip-address
+        |     |                 +--ro priority?                      uint8
+        |     |                 +--ro dead-time?                     oc-types:timeticks64
+        |     |                 +--ro dr-router-id?                  yang:dotted-quad
+        |     |                 +--ro dr-ip-address?                 inet:ip-address
+        |     |                 +--ro bdr-router-id?                 yang:dotted-quad
+        |     |                 +--ro bdr-ip-address?                inet:ip-address
+         |     |                 +--ro optional-capabilities?         yang:hex-string
+         |     |                 +--ro last-established-time?         oc-types:timeticks64
+         |     |                 +--ro adjacency-state?               identityref
+         |     |                 +--ro state-changes?                 uint32
+         |     |                 +--ro retransmission-queue-length?   uint32

@dplore
Copy link
Member

dplore commented Feb 19, 2025

/gcbrun

@dplore
Copy link
Member

dplore commented Feb 19, 2025

Note, the ygot check failing appears to be a problem with the github check, not your model. We'll fix that soon.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Status: Ready to discuss
Development

Successfully merging this pull request may close these issues.

3 participants